package integracion;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import negocio.Cuenta;
import negocio.DirectorPresupuesto;
import negocio.PeticionMaterial;
import negocio.Usuario;

public class DAOAdministrativoImp implements DAOAdministrativo{

	Connection _conexionBBDD;	
	
	
	private static DatosBBDD datosBBDD=CargadorBBDD.getParametrosBBDD();
	
	public DAOAdministrativoImp(){
		super();
		try {
			Class.forName("com.mysql.jdbc.Driver");
			_conexionBBDD = DriverManager.getConnection("jdbc:mysql://"+datosBBDD.getDireccion()+"/"+datosBBDD.getNombreBBDD(), datosBBDD.getUser(), datosBBDD.getPass());
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	@Override
	public ArrayList<Cuenta> getListaCuentas() {
		// TODO Auto-generated method stub
		ArrayList<Cuenta> cuentas= new ArrayList<Cuenta>();
		Cuenta actual;
		//consulta
		String sql="SELECT u.idcuentas,u.fecha,u.importe,u.motivo,u.descripcion\n"
				+"FROM cuentas u\n";
		try {
			Statement sentencia=_conexionBBDD.createStatement();
			sentencia.executeQuery(sql);
			ResultSet res=sentencia.getResultSet();
			while(res.next()){
				actual=new Cuenta(res.getInt("idcuentas"), res.getTime("fecha"),res.getInt("importe") , res.getString("motivo"), res.getString("descripcion"));
				cuentas.add(actual);
			}
		}catch(SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return cuentas;
	}

	@Override
	public ArrayList<Usuario> getListaUsuarios() {
		// TODO Auto-generated method stub
		ArrayList<Usuario> usuarios = new ArrayList<Usuario>();
		Usuario actual;
		//consulta
		String sql="SELECT u.dni,u.tipo,u.nombre,u.apellido1,u.apellido2\n"
				+"FROM usuario u\n";
				//+"WHERE u.tipo<>6";
		
		try {
			Statement sentencia=_conexionBBDD.createStatement();
			sentencia.executeQuery(sql);
			ResultSet res=sentencia.getResultSet();
			while(res.next()){
				actual=new Usuario(res.getInt("dni"),res.getInt("tipo"),res.getString("nombre"), res.getString("apellido1")+" "+res.getString("apellido2")," ",1);
				usuarios.add(actual);
			}
		}catch(SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return usuarios;
	}
	@Override
	public ArrayList<DirectorPresupuesto> getListaPresupuesto() {
		// TODO Auto-generated method stub
		ArrayList<DirectorPresupuesto> presupuestos=new ArrayList<DirectorPresupuesto>();
		String sql="SELECT *\n"
				+"FROM presupuesto\n"
				+";";
		try {
			Statement sentencia=_conexionBBDD.createStatement();
			sentencia.executeQuery(sql);
			ResultSet res=sentencia.getResultSet();
			while (res.next()){
				presupuestos.add(new DirectorPresupuesto(res.getInt("idPresupuesto"), res.getString("motivo"),res.getString("descripcion"), res.getString("fechaEmision"),res.getString("fechaResolucion"),res.getInt("importe"),res.getBoolean("aprobado")));
			}
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				
			}
		

		return presupuestos;
	}
	@Override
	public void nuevoPresupuesto(int dni, int importe, String motivo,
			String descripcion) {
		// TODO Auto-generated method stub
		String sql= "INSERT "+
		"INTO presupuesto (\n"+
		"dniAdministrativo,\n"+
		"motivo,\n"+
		"descripcion,\n"+
		"importe,\n"+
		"fechaEmision\n)\n"+
		"VALUES(\n"+
		""+dni +", '"+motivo +"', '"+descripcion +"', "+importe +" , now() \n" +
		");";
		try {
			Statement sentencia=_conexionBBDD.createStatement();
			sentencia.executeUpdate(sql);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				
			}		
		
	}
	@Override
	public ArrayList<PeticionMaterial> getListaPeticiones() {
		// TODO Auto-generated method stub
		ArrayList<PeticionMaterial> peticiones= new ArrayList<PeticionMaterial>();
		PeticionMaterial actual;
		//consulta
		String sql="SELECT u.idPeticionReposicionMaterial,u.dniEmpleado,u.idMaterial,u.cantidad,u.fechaEmision,u.aprobado\n"
				+"FROM peticionreposicionmaterial u\n";
		try {
			Statement sentencia=_conexionBBDD.createStatement();
			sentencia.executeQuery(sql);
			ResultSet res=sentencia.getResultSet();
			while(res.next()){
				actual=new PeticionMaterial(res.getInt("idPeticionReposicionMaterial"), res.getInt("dniEmpleado"),res.getInt("idMaterial") , res.getInt("cantidad"),res.getString("fechaEmision"),res.getBoolean("aprobado"));
				peticiones.add(actual);
			}
		}catch(SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return peticiones;
	}
	
	@Override
	public void validaPeticion(int index) {
		// TODO Auto-generated method stub
		String sql="UPDATE peticionreposicionmaterial SET aprobado=true"+", fechaResolucion=now() WHERE idPeticionReposicionMaterial="+index+";";
		
		try{
		Statement sentencia=_conexionBBDD.createStatement();
		sentencia.executeUpdate(sql);
		
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	
	}
	}
	@Override
	public void nuevaCuenta(int importe, String motivo, String descripcion) {
		// TODO Auto-generated method stub
		
		
			String sql= "INSERT "+
			"INTO cuentas (\n"+
			"motivo,\n"+
			"descripcion,\n"+
			"importe,\n"+
			"fecha\n)\n"+
			"VALUES(\n"+
			"'"+motivo +"', '"+descripcion +"', "+importe +" , now() \n" +
			");";
			try {
				Statement sentencia=_conexionBBDD.createStatement();
				sentencia.executeUpdate(sql);
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
					
				}		
			
		}
	

}
